package co.edu.uniquindio.ejb;

import java.util.List;

import co.edu.uniquindio.dao.AdministradorDao;
import co.edu.uniquindio.dao.AutomovilDao;
import co.edu.uniquindio.dao.CalificacionDao;
import co.edu.uniquindio.dao.ColorDao;
import co.edu.uniquindio.dao.CompradorDao;
import co.edu.uniquindio.dao.MarcaDao;
import co.edu.uniquindio.dao.ModeloDao;
import co.edu.uniquindio.dao.MotorDao;
import co.edu.uniquindio.dao.OfertaDao;
import co.edu.uniquindio.dao.PaisDao;
import co.edu.uniquindio.dao.PersonaDao;
import co.edu.uniquindio.dao.SubHolandesaDao;
import co.edu.uniquindio.dao.SubInglesaDao;
import co.edu.uniquindio.dao.SubSilenciosaDao;
import co.edu.uniquindio.dao.SubastaDao;
import co.edu.uniquindio.dao.VendedorDao;
import co.edu.uniquindio.ejbremotos.BusquedaEjbRemote;
import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Color;
import co.edu.uniquindio.logica.Comprador;
import co.edu.uniquindio.logica.Marca;
import co.edu.uniquindio.logica.Modelo;
import co.edu.uniquindio.logica.Motor;
import co.edu.uniquindio.logica.Pais;
import co.edu.uniquindio.logica.Persona;
import co.edu.uniquindio.logica.Vendedor;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import org.hibernate.validator.constraints.Email;

import com.sun.xml.rpc.processor.modeler.j2ee.xml.string;

/**
 * EJB implementation class for Ejb: BusquedaEjb
 * este EJB defne una vista (Representacion) a ser accedida por
 * el cliente para el manejo de busquedas en la BD 
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */
/**
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */
@Stateless
@LocalBean
public class BusquedaEjb implements BusquedaEjbRemote {

	@EJB
	private AutomovilDao automovilDao;
	@EJB
	private VendedorDao vendedorDao;
	@EJB
	private CompradorDao compradorDao;
	@EJB
	private SubastaDao SubastaDao;
	@EJB
	private SubHolandesaDao subHolandesa ;
	@EJB
	private SubInglesaDao subInglesa;
	@EJB
	private SubSilenciosaDao subSilenciosa;
	@EJB
	private OfertaDao ofertaDao;
	@EJB 
	private CalificacionDao calificacionDao;
	@EJB
	private ModeloDao modeloDao;
	@EJB
	private MarcaDao marcaDao;
	@EJB
	private PaisDao paisDao;
	@EJB
	private MotorDao motorDao;
	@EJB
	private ColorDao colorDao;
	@EJB
	private AdministradorDao adminDao;
	@EJB
	private PersonaDao personaDao;
	
    /**
     * Default constructor. 
     */
    public BusquedaEjb() {
        // TODO Auto-generated constructor stub
    }
    /**
	 * este metodo permite buscar un auotomovil por su numero de placa
     * @param la placa del automovil
	 * @return un atomovil asociado al numero de placa que le llega por parametro
	 * @throws Exception
	 */
	@Override
	public Automovil buscarPorPlaca(String placa) throws Exception
	{
		Automovil auto =automovilDao.findByKey(placa);
		if(auto!=null)
		return auto;
		else
			throw new Exception("el automovil no existe verifique bien  los datos");
	}
	/**
	 * este metodo permite obtener un vendedor segun su numero de cedula
	 * @param la cedula del vendedor
	 * @return el vendedor asociado a el numero de la cedula
	 */
	public Vendedor buscarVporCedula(String cedula)throws Exception
	{
		Vendedor ven= vendedorDao.findByKey(cedula);
		if(ven!=null)
        return ven;
		else
			throw new Exception("el vendedor no existe verifique bien  los datos");
	}
	/**
	 * este metodo me permite obtener un listado de vendedores asociados a un parametro de busqueda por medio del nombre
	 * @param el nombre 
	 * @return una lista vendedores asociados a el parametro de busqueda
	 * @throws Exception
	 */
	public List<Vendedor> buscarVpornombre(String nombre)throws Exception
	{
		List<Vendedor> vendedores= vendedorDao.buscarVporNombre(nombre);
		if(vendedores.size()!=0)
			return vendedores;
		else
			throw new Exception("no existen vendedores asociados al  tipo de busqueda verifique bien  los datos");
	}
	/**
	 * este metodo permite obtener un comprador segun el numero de su cedula
	 * @param cedula
	 * @return
	 * @throws Exception
	 */
	public Comprador buscarCporCedula(String cedula)throws Exception
	{
		Comprador comprador= compradorDao.findByKey(cedula);
		if(comprador!=null)
			return comprador;
		else
			throw new Exception("el comprador no existe verifique bien  los datos");
	}
	/**
	 * este metodo me permite obtener un listado de Compradores asociados a un parametro de busqueda por medio del nombre
	 * @param el parametroo de busqueda nombre 
	 * @return una lista de compradores asociados a el parametro de busqueda
	 * @throws Exception
	 */
	public List<Comprador> buscarCpornombre(String nombre)throws Exception
	{
		List<Comprador> compradores= compradorDao.buscarCporNombre(nombre);
		if(compradores.size()!=0)
			return compradores;
		else
			throw new Exception("no existe compradores asociados a el tipo de busqueda, verifique bien  los datos");
	}
	/**
	 * este metodo me permite obtener un listado de marcas asociados a un parametro de busqueda por medio del nombre
	 * @param el parametroo de busqueda nombre 
	 * @return una lista de marcas asociados a el parametro de busqueda
	 * @throws Exception
	 */
	public List<Marca> buscarMpornombre(String nombre)throws Exception
	{
		List<Marca> marcas= marcaDao.buscarMporNombre(nombre);
		if(marcas.size()!=0)
			return marcas;
		else
			throw new Exception("no existe compradores asociados a ese nombre, verifique bien  los datos");
	}
   /**
    * este metodo me permite obtener los modelos asociados a una marca
    */
    public List<Modelo> modelosPorMarca()
    {
    	return null;
    }
    public List<Marca> obtenerMarcas()
	{
		List<Marca> list =marcaDao.getAll();
	    return list;
	}
	public List<Modelo>obtenerModelos()
	{
		List<Modelo>list=modeloDao.getAll();
		return list;
	}
	public List<Pais>obtenerPaises()
	{
		List<Pais>list=paisDao.getAll();
		return list;
	}
	public List<Color>obtenerColores()
	{
		List<Color>list=colorDao.getAll();
		return list;
	}
	public List<Motor>obtenerMotores()
	{
		List<Motor>list=motorDao.getAll();
		return list;
	}

}
